var arr = [
  { cityId: 110100, name: "北京", pinyin: "beijing", isHot: 1 },
  { cityId: 120100, name: "天津", pinyin: "tianjin", isHot: 0 },
  { cityId: 130100, name: "石家庄", pinyin: "shijia", isHot: 0 },
  { cityId: 130200, name: "唐山", pinyin: "tangshan", isHot: 0 }
];

// 定义一个空的数组来接收
var result = []
arr.forEach(item => {
  // 取出当前城市的拼音首字母
  const py = item.pinyin.charAt(0).toUpperCase()
  // 判断当前py的城市是否已经分类过
  const index = result.findIndex(item => item.py === py)
  if (index > -1) {
    // 存在
    result[index].list.push(item)
  } else {
    // 不存在
    const obj = {
      py,
      list: [item]
    }
    result.push(obj)
  }
})
console.log(result)

// 'A'.charCodeAt()

// var result = [
//   {
//     py: 'B',
//     list: [
//       { cityId: 110100, name: "北京", pinyin: "beijing", isHot: 1 }
//     ]
//   },
//   {
//     py: 'T',
//     list: [
//       { cityId: 120100, name: "天津", pinyin: "tianjin", isHot: 0 },
//       { cityId: 130200, name: "唐山", pinyin: "tangshan", isHot: 0 }
//     ]
//   },
//   {
//     py: 'S',
//     list: [
//       { cityId: 130100, name: "石家庄", pinyin: "shijia", isHot: 0 }
//     ]
//   }
// ]
